{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这个作业中，我们使用tensorflow来实现一个简单的手写数字识别的网络，并用这个网络来做个\n",
    "简单的识别示例。\n",
    "\n",
    "本作业中，需要参与者应用视频中学到的知识：dropout，learingratedecay，初始化等等，将网络最终在validation数据上的得分尽可能的提高。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "首先导入一些用到的库。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:09.818038Z",
     "start_time": "2018-06-05T10:51:53.528666Z"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import tensorflow as tf\n",
    "from tensorflow.examples.tutorials.mnist import input_data\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "tf.logging.set_verbosity(tf.logging.INFO)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-01T05:39:48.304594Z",
     "start_time": "2018-06-01T04:55:17.674707Z"
    }
   },
   "source": [
    "先来看看数据长什么样子"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:10.972269Z",
     "start_time": "2018-06-05T10:52:09.831277Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Extracting MNIST_data/train-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/train-labels-idx1-ubyte.gz\n",
      "Extracting MNIST_data/t10k-images-idx3-ubyte.gz\n",
      "Extracting MNIST_data/t10k-labels-idx1-ubyte.gz\n",
      "(55000, 784)\n",
      "(55000,)\n",
      "(5000, 784)\n",
      "(5000,)\n",
      "(10000, 784)\n",
      "(10000,)\n"
     ]
    }
   ],
   "source": [
    "mnist = input_data.read_data_sets(\"MNIST_data/\")\n",
    "\n",
    "print(mnist.train.images.shape)\n",
    "print(mnist.train.labels.shape)\n",
    "\n",
    "print(mnist.validation.images.shape)\n",
    "print(mnist.validation.labels.shape)\n",
    "\n",
    "print(mnist.test.images.shape)\n",
    "print(mnist.test.labels.shape)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-01T05:49:40.128071Z",
     "start_time": "2018-06-01T05:49:40.123888Z"
    }
   },
   "source": [
    "可以看到images里面有数量不等的图片，每张图片是28x28长度的一个一维向量，\n",
    "所以用的时候需要先给它还原成28x28的二维图片。labels中则是图片对应的数字的值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.285414Z",
     "start_time": "2018-06-05T10:52:11.009716Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8,8))\n",
    "\n",
    "for idx in range(16):\n",
    "    plt.subplot(4,4, idx+1)\n",
    "    plt.axis('off')\n",
    "    plt.title('[{}]'.format(mnist.train.labels[idx]))\n",
    "    plt.imshow(mnist.train.images[idx].reshape((28,28)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来，定义用于训练的网络，首先定义网络的输入。\n",
    "\n",
    "这里我们直接使用上面的数据作为输入，所以定义两个placeholder分别用于图像和lable数据，另外，定义一个float类型的变量用于设置学习率。\n",
    "\n",
    "为了让网络更高效的运行，多个数据会被组织成一个batch送入网络，两个placeholder的第一个维度就是batchsize，因为我们这里还没有确定batchsize，所以第一个维度留空。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.339647Z",
     "start_time": "2018-06-05T10:52:12.311640Z"
    }
   },
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", [None, 784])\n",
    "y = tf.placeholder(\"int64\", [None])\n",
    "learning_rate = tf.placeholder(\"float\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.464679Z",
     "start_time": "2018-06-05T10:52:12.357180Z"
    }
   },
   "outputs": [],
   "source": [
    "def initialize(shape, stddev=0.1):\n",
    "    return tf.truncated_normal(shape, stddev=0.1)\n",
    "    \n",
    "\n",
    "L1_units_count = 100\n",
    "\n",
    "W_1 = tf.Variable(initialize([784, L1_units_count]))\n",
    "b_1 = tf.Variable(initialize([L1_units_count]))\n",
    "logits_1 = tf.matmul(x, W_1) + b_1\n",
    "output_1 = tf.nn.relu(logits_1)\n",
    "\n",
    "L2_units_count = 10 \n",
    "W_2 = tf.Variable(initialize([L1_units_count, L2_units_count]))\n",
    "b_2 = tf.Variable(initialize([L2_units_count]))\n",
    "logits_2 = tf.matmul(output_1, W_2) + b_2  \n",
    "\n",
    "logits = logits_2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "接下来定义loss和用于优化网络的优化器。loss计算使用了sparse_softmax_cross_entropy_with_logits,\n",
    "这样做的好处是labels可以不用手动做one_hot省了一些麻烦。这里使用了sgd优化器，学习率为可以根据需要设定。\n",
    "\n",
    ">试试看，增大减小学习率，换个优化器再进行训练会发生什么。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.691918Z",
     "start_time": "2018-06-05T10:52:12.523313Z"
    },
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "cross_entropy_loss = tf.reduce_mean(\n",
    "    tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=y))\n",
    "\n",
    "optimizer = tf.train.GradientDescentOptimizer(\n",
    "    learning_rate=learning_rate).minimize(cross_entropy_loss)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-01T06:25:56.449132Z",
     "start_time": "2018-06-01T06:25:56.438340Z"
    }
   },
   "source": [
    "需要注意的是，上面的网络，最后输出的是未经softmax的原始logits，而不是概率分布，\n",
    "要想看到概率分布，还需要做一下softmax。\n",
    "\n",
    "将输出的结果与正确结果进行对比，即可得到我们的网络输出结果的准确率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.746028Z",
     "start_time": "2018-06-05T10:52:12.707989Z"
    }
   },
   "outputs": [],
   "source": [
    "pred = tf.nn.softmax(logits)\n",
    "correct_pred = tf.equal(tf.argmax(pred, 1), y)\n",
    "accuracy = tf.reduce_mean(tf.cast(correct_pred, tf.float32))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "saver用于保存或恢复训练的模型。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T10:52:12.786620Z",
     "start_time": "2018-06-05T10:52:12.767402Z"
    }
   },
   "outputs": [],
   "source": [
    "batch_size = 32\n",
    "trainig_step = 1000\n",
    "\n",
    "saver = tf.train.Saver()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "以上定义的所有操作，均为计算图，也就是仅仅是定义了网络的结构，实际需要运行的话，还需要创建一个session，并将数据填入网络中。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "start_time": "2018-06-05T10:52:06.366Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "after 100 training steps, the loss is 0.660815, the validation accuracy is 0.8656\n",
      "after 200 training steps, the loss is 0.648703, the validation accuracy is 0.9038\n",
      "after 300 training steps, the loss is 0.449851, the validation accuracy is 0.922\n",
      "after 400 training steps, the loss is 0.189482, the validation accuracy is 0.9356\n",
      "after 500 training steps, the loss is 0.0877306, the validation accuracy is 0.9404\n",
      "after 600 training steps, the loss is 0.199199, the validation accuracy is 0.9362\n",
      "after 700 training steps, the loss is 0.0673589, the validation accuracy is 0.9378\n",
      "after 800 training steps, the loss is 0.168621, the validation accuracy is 0.946\n",
      "after 900 training steps, the loss is 0.122134, the validation accuracy is 0.945\n",
      "after 1000 training steps, the loss is 0.113262, the validation accuracy is 0.959\n",
      "the training is finish!\n",
      "the test accuarcy is: 0.9536\n"
     ]
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    #定义验证集与测试集\n",
    "    validate_data = {\n",
    "        x: mnist.validation.images,\n",
    "        y: mnist.validation.labels,\n",
    "    }\n",
    "    test_data = {x: mnist.test.images, y: mnist.test.labels}\n",
    "\n",
    "    for i in range(trainig_step):\n",
    "        xs, ys = mnist.train.next_batch(batch_size)\n",
    "        _, loss = sess.run(\n",
    "            [optimizer, cross_entropy_loss],\n",
    "            feed_dict={\n",
    "                x: xs,\n",
    "                y: ys,\n",
    "                learning_rate: 0.3\n",
    "            })\n",
    "\n",
    "        #每100次训练打印一次损失值与验证准确率\n",
    "        if (i+1) > 0 and (i+1) % 100 == 0:\n",
    "            validate_accuracy = sess.run(accuracy, feed_dict=validate_data)\n",
    "            print(\n",
    "                \"after %d training steps, the loss is %g, the validation accuracy is %g\"\n",
    "                % (i+1, loss, validate_accuracy))\n",
    "            saver.save(sess, './models_save/model.ckpt', global_step=i+1)\n",
    "\n",
    "    print(\"the training is finish!\")\n",
    "    #最终的测试准确率\n",
    "    acc = sess.run(accuracy, feed_dict=test_data)\n",
    "    print(\"the test accuarcy is:\", acc)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面，用我们训练的模型做一个测试。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-05T07:51:50.073680Z",
     "start_time": "2018-06-05T07:51:48.777465Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from ./models_save/model.ckpt-1000\n",
      "0.9375\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "with tf.Session() as sess:\n",
    "    ckpt = tf.train.get_checkpoint_state('./models_save/')\n",
    "    if ckpt and ckpt.model_checkpoint_path:\n",
    "        saver.restore(sess, ckpt.model_checkpoint_path)\n",
    "        final_pred, acc = sess.run(\n",
    "            [pred, accuracy],\n",
    "            feed_dict={\n",
    "                x: mnist.test.images[:16],\n",
    "                y: mnist.test.labels[:16]\n",
    "            })\n",
    "        orders = np.argsort(final_pred)\n",
    "        plt.figure(figsize=(8, 8))\n",
    "        print(acc)\n",
    "        for idx in range(16):\n",
    "            order = orders[idx, :][-1]\n",
    "            prob = final_pred[idx, :][order]\n",
    "            plt.subplot(4, 4, idx + 1)\n",
    "            plt.axis('off')\n",
    "            plt.title('{}: [{}]-[{:.1f}%]'.format(mnist.test.labels[idx],\n",
    "                                                  order, prob * 100))\n",
    "            plt.imshow(mnist.test.images[idx].reshape((28, 28)))\n",
    "\n",
    "    else:\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2018-06-01T07:23:15.292108Z",
     "start_time": "2018-06-01T07:23:15.283820Z"
    }
   },
   "source": [
    "以作业提供的参数运行出来的结果，只看上面几个数字还是很不错的，但是总体准确率不太理想。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<tensorflow.python.summary.writer.writer.FileWriter at 0xb44e8f470>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 保存图结构，利用tensorboard可视化\n",
    "tf.summary.FileWriter('./log', sess.graph)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
